package co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import co.gov.aerocivil.siga.comun.bean.IMensaje;
import co.gov.aerocivil.siga.comun.excepcion.LogicaExcepcion;
import co.gov.aerocivil.siga.comun.excepcion.SistemaExcepcion;
import co.gov.aerocivil.siga.comun.modelo.ServicioAbstracto;
import co.gov.aerocivil.siga.comun.modelo.administrador.AdmTipoClasificacion;
import co.gov.aerocivil.siga.comun.modelo.administrador.Tipo;
import co.gov.aerocivil.siga.comun.servicio.administrador.ITipoServicio;
import co.gov.aerocivil.siga.registrarquejaservicioaerolinea.servicio.IReclamacionServicio;
import co.gov.aerocivil.siga.registrarquejaservicioaerolinea.util.ConstantesValidacion;

/**
 * 
 * @author lfcortes
 *
 */
@Stateless
public class ReclamacionServicio extends ServicioAbstracto<Long, Tipo> implements IReclamacionServicio {

	
	/**
	 * Dependencia para acceder a los tipos
	 */
	@EJB
	private ITipoServicio tipoServicio;
	
	/**
	 * Inyección CDI del bean de aplicación de Mensajes
	 */
	@Inject
	private IMensaje mensaje;
	
	/** Constante que representa la instancia del Log. */
	private static final Logger LOG = LoggerFactory.getLogger(AerolineaServicio.class);
	
	/**
	 * Constructor del servicio de reclamaciones
	 */
	public ReclamacionServicio() {
		super(Tipo.class);
	}


	/**
	 * Permite obtener la lista de motivos de reclamaciones del sistema.
	 * 
	 * @return lista de motivos de reclamación.
	 * @throws LogicaExcepcion error al consultar
	 * @throws SistemaExcepcion  error al consultar
	 */
	@Override
	public List<Tipo> obtenerTodosMotivosReclamacion() throws SistemaExcepcion, LogicaExcepcion {
		try { 
			LOG.info("Iniciando obtenerTodosMotivosReclamacion");
			AdmTipoClasificacion tipoClasificacion = new AdmTipoClasificacion();
			tipoClasificacion.setId(new Long(0));
			tipoClasificacion.setCodigo(ConstantesValidacion.CODIGO_TIPO_RECLAMACION);
			return tipoServicio.buscarTipoPorCodigoTipoClasificacion(tipoClasificacion);
		} catch (SistemaExcepcion e) {
			LOG.error(mensaje.obtenerMensaje(ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA)
					+ ". " + e.getMessage());
			throw new SistemaExcepcion(e.getMessage());
		} catch (LogicaExcepcion e) {
			LOG.error(mensaje.obtenerMensaje(ConstantesValidacion.ERROR_SISTEMA_INICIO_REGISTRAR_QUEJA)
					+ ". " + e.getMessage());
			throw new LogicaExcepcion(e.getMessage());
		} finally {
			LOG.info("Finalizando obtenerTodosMotivosReclamacion");
		}
	}

}
